<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    // 什么是异步，简单的理解：未来某一个时间将要发生的事情
    //    function fn (cb){ // cb 是一个形参
    //     //  console.log(cb);
    //      let a = 0;
    //      setTimeout(() => {
    //        a = 10;
    //        cb(a);
    //      },3000)
    //    }

    //    fn((val)=>{
    //      console.log(val);
    //    });


    // promise 有三种状态，
    // 1.Pending状态（进行中）
    // 2.Fulfilled状态（已成功）
    // 3.Rejected状态（已失败）

//     function fn() { // cb 是一个形参
//         return new Promise((resolve,reject) => {
//             let a = 0;
//             setTimeout(() => {
//                 a = 10;
//                 resolve(a);
//             }, 3000)
//         })
//     }

//   fn().then(res => {
//       console.log(res);
//   }).catch(err => {
//       console.log(err);
//   })



// function sleep(num) {
//     return new Promise((resolve, reject) => {
//        if (num>10){
//           resolve('成功')                      
//        } else {
//           reject('失败')     
//        }  
//     })
// }
// sleep(20).then(res => {
//    console.log(res);
// })

// sleep(2).catch(err => {
//     console.log(err);
// })






// let promise = new Promise(function(resolve, reject){
//     console.log("AAA");
//     resolve()
// });
// promise.then(() => console.log("BBB"));
// console.log("CCC");



// let promise = new Promise(function(resolve, reject){
//     console.log("1");
//     setTimeout(() => {
//       resolve();
//     },2000)
// });
// setTimeout(()=>console.log("2"), 0);
// promise.then(() => console.log("3"));
// console.log("4");


// promise的all⽅法和race⽅法?

let fn = () => {
 return new Promise((resolve,reject) => {
    setTimeout(() => {
        resolve(10)
    },1000)
  })
}

let fn1 = () => {
 return new Promise((resolve,reject) => {
    setTimeout(() => {
        resolve(20)
    },2000)
  })
}
let fn2 = () => {
  return new Promise((resolve,reject) => {
    setTimeout(() => {
        resolve(30)
    },3000)
  })
}
// fn().then(res => {
//     fn1().then(res2 => {
//        fn2().then(res3 => {
//            console.log(res+res2+res3);
//        })
//     })
// })

// 求 fn he fn1 的返回结果的和
// let fn2 = () => { // 求 fn 和 fn1 两个返回的和
   
// }

// all 所有的异步请求，都完成了，才会触发 .then 函数，才会有结果
// Promise.all([fn(),fn1(),fn2()]).then(res => {
//     console.log(res);
// })

// race 只要有一个，异步完成了，就会返回结果
// Promise.race([fn(),fn1(),fn2()]).then(res => {
//     console.log(res);
// })



// async和await 是成对出现的，把异步变成同步。
// await 有等待的意思

let fn4 = async () => {
   let num = await fn();
   let num1 = await fn1();
//    console.log(num+num1);
   return num+num1;
}

// 使用 async 和 await 的函数 会被转换成 promise 函数
fn4().then(res => {
  console.log(res);
});

</script>